package logic;

import dto.PacienteDTO;
import dto.TurnoDTO;
import java.sql.SQLException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import jr.ListadoDeTurnosJR;

/**
 *
 * @author lucifer
 */
public class ListadoDeTurnos {

  private Medico medico;
  private LocalDate fecha;
  private ArrayList<TurnoDTO> turnos;

  public ListadoDeTurnos(Medico medico, LocalDate fecha) throws SQLException {
    turnos = Turno.SearchByFechaMedico(this.fecha = fecha, (this.medico = medico).getId());
  }

  public ArrayList<ListadoDeTurnosJR> GenerarListado() throws SQLException {
    ArrayList<ListadoDeTurnosJR> l = new ArrayList<>();

    if (turnos.isEmpty()) {
      l.add(new ListadoDeTurnosJR(
        String.format("%s %s", medico.getNombre(), medico.getApellido()), Especialidad.SearchByID(medico.getIdEspecialidad()).getNombre(), medico.getMatricula(),
        fecha.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")), " - ",
        "", "No hay turnos",
        null, null, null, null, null, null
      ));
      return l;
    }

    for (TurnoDTO t : turnos) {
      if (t.isSobreturno() && new Turno(t).IsLibre() || new Turno(t).IsAnulado()) {
        continue;
      }

      PacienteDTO p = Paciente.SearchByID(t.getIdPaciente());
      String paciente = null;
      String dni = null;
      String particular = null;
      String obraSocial = null;
      String plan = null;
      String nAfiliado = null;

      if (p != null) {
        paciente = String.format("%s %s", p.getNombre(), p.getApellido());
        dni = String.format("%d", p.getDni());
        particular = p.getIdObraSocial() == 0 ? "Particular" : "";
        obraSocial = ObraSocial.SearchByID(p.getIdObraSocial()).getNombre();
        plan = ObraSocialPlan.SearchByID(p.getIdPlanObraSocial()).getNombre();
        nAfiliado = String.format("%d", p.getNAfiliado());
      }

      l.add(new ListadoDeTurnosJR(
        String.format("%s %s", medico.getNombre(), medico.getApellido()), Especialidad.SearchByID(medico.getIdEspecialidad()).getNombre(), medico.getMatricula(),
        t.getFecha().toLocalDate().format(DateTimeFormatter.ofPattern("dd/MM/yyyy")), t.getFecha().toLocalTime().toString(),
        t.isSobreturno() ? "(S)" : "", new Turno(t).IsLibre() ? "Libre" : "",
        paciente, dni,
        particular,
        obraSocial,
        plan,
        nAfiliado
      ));
    }

    return l;
  }

}
